package cn.zhfeat.hatch.rpc;


import cn.zhfeat.core.shiro.bean.ShiroSysAuthorityBean;
import cn.zhfeat.hatch.dto.store.BaseStoreToUserDto;
import cn.zhfeat.hatch.dto.sysuser.SysAuthorityDto;
import cn.zhfeat.hatch.dto.sysuser.SysUserDto;
import cn.zhfeat.hatch.dto.sysuser.SysUserRoleDto;
import cn.zhfeat.hatch.entity.store.BaseStoreToUser;
import cn.zhfeat.hatch.entity.sysuser.SysUser;
import cn.zhfeat.hatch.entity.sysuser.SysUserAttribute;
import cn.zhfeat.hatch.entity.sysuser.SysUserRole;
import com.github.pagehelper.PageInfo;

import java.util.List;


/**
 * @description: 用户业务服务接口
 *
 * @author ZhangHao
 * @date 2018年5月2日 下午4:52:23 
 * @version 1.0.0.1
 */
public interface IAccountRpcService {
	
	/**
	 * @description: 根据用户名手机号模糊查询用户信息 |名片列表页 - 新建名片 - 弹框列表 - 分页数据
	 *		原方法名：getUserAllByNameOrPhone
	 *
	 * @param dto
	 * @author ZhangHao
	 * @date 2018年5月2日 下午5:09:53 
	 * @version 1.0.0.1
	 */
	public PageInfo<SysUser> ajaxPageUserListByType(SysUserDto dto);
	
	
	/**
	 * @description: 根据Long userId ， Long cid 查询用户门店关联信息|查询条件不符则返回null
	 *			查询用户绑定的门店服务接口
	 *
	 * @author ZhangHao
	 * @date 2018年5月3日 下午2:17:17 
	 * @version 1.0.0.1
	 */
	public List<BaseStoreToUser> selectUserStores(BaseStoreToUserDto dto);
	
	
	/**
	 * @description: 根据条件定位一条用户信息
	 *
	 * @param dto
	 * @author ZhangHao
	 * @date 2018年5月4日 下午4:51:26 
	 * @version 1.0.0.1
	 */
	public SysUser findUserInfoByType(SysUserDto dto);
	
	
	/**
	 * @description: 根据主键ID更新用户数据，如果id为null或updateTime为null则返回0，标识更新失败
	 *		逻辑删除也调用此方法。
	 * 原方法：public Boolean updateUser(SysUser user);
	 * @param entity
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月6日 下午9:01:35 
	 * @version 1.0.0.1
	 */
	public Integer updateSelective(SysUser entity);
	
	
	/**
	 * @description: 插入用户数据并返回自增ID
	 * 原方法:public SysUser createUser(SysUser user);
	 * @param entity
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 上午10:38:14 
	 * @version 1.0.0.1
	 */
	public SysUser insertSelective(SysUser entity);
	
	
	/**
	 * @description: 查询符合条件的用户总数
	 * 原方法:public Integer selectUserCount(String tenantId);
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 上午11:02:53 
	 * @version 1.0.0.1
	 */
	public Integer selectCountByType(SysUserDto dto);
	
	
	/**
	 * @description: 用户列表页分页信息
	 * 原方法:	public Map<String, Object> userLists(String tenantId,String keyWord,Integer status,
			    String orderby,Integer startIndex,Integer pageSize,String roleName,String departmentName);
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 上午11:05:20 
	 * @version 1.0.0.1
	 */
	public PageInfo<SysUser> ajaxPageList(SysUserDto dto);
	


	/**
	 * @description: 根据Long userId 查询用户角色关联信息|查询条件不符则返回null
	 * 原方法:public List<SysUserRole> selectUserRoles(Long userId);
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午1:42:06 
	 * @version 1.0.0.1
	 */
	public List<SysUserRole> selectSysUserRoles(SysUserRoleDto dto);
	
	
	/**
	 * @description: 根据用户id更新用户角色对应关系，如果用户id为null或updateTime为null则返回0，标识更新失败
	 *		逻辑删除也调用此方法。
	 * 原方法:public Boolean deleteUserRoles(Long userId);
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午1:50:14 
	 * @version 1.0.0.1
	 */
	public Integer updateSysUserRolesByType(SysUserRoleDto dto);
	
	
	/**
	 * @description: 根据用户id更新用户门店对应关系，如果用户id为null或updateTime为null则返回0，标识更新失败
	 *		逻辑删除也调用此方法。
	 * 原方法:public Boolean deleteUserStores(Long userId,String tenantId);
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午2:18:17 
	 * @version 1.0.0.1
	 */
	public Integer updateBaseStoreToUserByType(BaseStoreToUserDto dto);
	
	
	/**
	 * @description: 增加用户和角色的对应关系并返回自增ID
	 * 原方法:public Boolean createUserRole(SysUserRole sysUserRole);
	 * @param entity
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午2:24:24 
	 * @version 1.0.0.1
	 */
	public SysUserRole insertUserRoles(SysUserRole entity);
	

	/**
	 * @description: 增加用户和门店的对应关系并返回自增ID
	 * 原方法:public Boolean createUserStore(BmUserStore bmUserStore);
	 * @param entity
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午2:29:01 
	 * @version 1.0.0.1
	 */
	public BaseStoreToUser insertBaseStoreToUser(BaseStoreToUser entity);
	

	/**
	 * @description: 根据条件查询多条用户记录 - 后续可拓展查询字段
	 * 原方法:public List<SysUser> selectAllUsers(String tenantId);
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午2:37:13 
	 * @version 1.0.0.1
	 */
	public List<SysUser> findListByDto(SysUserDto dto);
	

	/**
	 * @description: 查询用户绑定的门店详细 - 列表分页
	 * 原方法:
	 * 1、public List<Map<String, Object>> getStoreByData(String userId,String tenantId, Integer startIndex,Integer pageSize)
	 * 2、public int getStoreTotlCount(String userId,String tenantId)
	 * 两个方法合并为一个分页方法
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午4:25:36 
	 * @version 1.0.0.1
	 */
	public PageInfo<BaseStoreToUser> ajaxPageListByBaseStores(BaseStoreToUserDto dto);
	
	
	/**
	 * @description: 用户概要信息查询接口 - 查询用户、角色、部门
	 * 原方法:public Map<String, Object> selectSysUserDetail(Long id) 
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月7日 下午4:51:54 
	 * @version 1.0.0.1
	 */
	public SysUser findUserInfoForDetailByDto(SysUserDto dto);


	/**
	 * @description: 查询用户对应的一组数据特征属性
	 *
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月10日 下午1:23:00 
	 * @version 1.0.0.1
	 */
	public List<SysUser> findUserAttributeByDto(SysUserDto dto);
	
	
	/**
	 * @description:增加用户对应的数据特征属性 
	 *
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月10日 下午1:27:33 
	 * @version 1.0.0.1
	 */
	public SysUserAttribute inserttUserAttribute(SysUserAttribute entity);
	
	
	/**
	 * @description: 更新用户对应的数据特征属性
	 *
	 * @param entity
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月10日 下午1:29:25 
	 * @version 1.0.0.1
	 */
	public Integer updateUserAttribute(SysUserAttribute entity);

	
	/**
	 * @description: 菜单使用的临时方法
	 *
	 * @return 
	 * @author ZhangHao
	 * @date 2018年5月20日 下午2:31:02 
	 * @version 1.0.0.1
	 */
	public List<ShiroSysAuthorityBean> findMenuListByDto(SysAuthorityDto dto);


	/**
	 * @description: 根据用户名称 模糊查询
	 *
	 * @param dto
	 * @return 
	 * @author ZhangHao
	 * @date 2018年7月1日 下午1:36:35 
	 * @version 1.0.0.1
	 */
	List<SysUser> userListByLikeName(SysUserDto dto);
}




























